home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / src / slave-examples / chaosengine.asm < prev    next >
Assembly Source File  |  1998-06-22  |  4KB  |  177 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    chaosengine.asm
  3. ;  :Contents.    Slave for ChaosEngine
  4. ;  :Author.    BJ
  5. ;  :History.    20.05.96
  6. ;        23.05.97
  7. ;        08.08.97 new slave version, wmode killed
  8. ;        31.08.97 new keyboard style
  9. ;  :Requires.    -
  10. ;  :Copyright.    Public Domain
  11. ;  :Language.    68000 Assembler
  12. ;  :Translator.    Barfly V1.131
  13. ;  :To Do.
  14. ;---------------------------------------------------------------------------*
  15.  
  16.     INCDIR    Includes:
  17.     INCLUDE    whdload.i
  18.  
  19.     OUTPUT    wart:chaosengine/chaosengine.slave
  20.     BOPT    O+ OG+            ;enable optimizing
  21.     BOPT    w4-            ;disable 64k warnings
  22.  
  23. ;======================================================================
  24.  
  25. _base        SLAVE_HEADER        ;ws_Security + ws_ID
  26.         dc.w    4        ;ws_Version
  27.         dc.w    WHDLF_Disk|WHDLF_NoError|WHDLF_EmulTrap    ;ws_flags
  28. _upchip        dc.l    $ff000        ;ws_BaseMemSize
  29.         dc.l    $f2800        ;ws_ExecInstall
  30.         dc.w    _Start-_base    ;ws_GameLoader
  31.         dc.w    0        ;ws_CurrentDir
  32.         dc.w    0        ;ws_DontCache
  33. _keydebug    dc.b    $58        ;ws_keydebug = F9
  34. _keyexit    dc.b    $59        ;ws_keyexit = F10
  35.  
  36. ;======================================================================
  37. _Start        ;    A0 = resident loader
  38. ;======================================================================
  39.  
  40.         lea    (_resload,pc),a1
  41.         move.l    a0,(a1)            ;save for later using
  42.  
  43.         move.l    #CACRF_EnableI,d0    ;enable instruction cache
  44.         move.l    d0,d1            ;mask
  45.         jsr    (resload_SetCACR,a0)
  46.  
  47.         move.l    #$9c00,d0        ;offset     $3400 for not enough mem
  48.         move.l    #$15c00,d1        ;size
  49.         moveq    #1,d2            ;disk
  50.         lea    $80000,a0
  51.         move.l    (_resload),a3
  52.         jsr    (resload_DiskLoad,a3)
  53.         
  54.         clr.l    $8            ;lower bound fastmem
  55.         move.l    (_upchip),$14        ;uppper bound chipmem
  56.         move.l    #3,$24            ;flags
  57.         
  58.         clr.l    $94            ;AccessFault $cccccccc pc=9ff9c
  59.         
  60.         lea    $80000,a4
  61.         MOVE.L    $0020(A4),D0
  62.         ADD.L    D0,D0
  63.         ADD.L    D0,D0
  64.         LEA    $002C(A4,D0.L),A1
  65.         CLR.L    (A1)
  66.         MOVE.L    A1,D0
  67.         LSR.L    #2,D0
  68.         MOVE.L    D0,$0020(A4)
  69.  
  70.         move.l    #$4e714e71,$24+$1d0(a4)
  71.         Jsr    $0024+4(A4)        ;decrunch
  72.  
  73.         patch    $84f5e,_loader
  74.         patch    $8a3ec,_cl
  75.         jmp    $24+$1ec(a4)        ;start the dance
  76.  
  77. ;--------------------------------
  78.  
  79. _cl        add.w    #$9c4,a7
  80.         move.l    #$711e7e0c,$100
  81.         rts
  82.  
  83. _loader        movem.l    d1-d3/a0-a2,-(a7)
  84.  
  85.         moveq    #0,d3
  86.         cmp.w    #$16,d1        ;accessing disk-id (chaos special)
  87.         bne    .go
  88.         move.w    (.dchk),d3
  89.         not.w    d3
  90.         bne    .go
  91.         
  92.         lea    (.disk),a1
  93.         addq.w    #1,(a1)
  94.         move.w    (a1),d3
  95.         cmp.w    #3,d3
  96.         bne    .g1
  97.         move.w    #1,(a1)
  98. .g1        moveq    #0,d3
  99.  
  100. .go        lea    (.dchk),a1
  101.         move.w    d3,(a1)
  102.  
  103.         mulu    #512,d1        ;start on disk
  104.         move.l    d1,d0        ;offset
  105.         mulu    #512,d2        ;amount of blocks
  106.         move.l    d2,d1        ;size
  107.         moveq    #0,d2
  108.         move.w    (.disk),d2    ;disk
  109.         move.l    (_resload),a2
  110.         jsr    (resload_DiskLoad,a2)
  111.         movem.l    (a7)+,d1-d3/a0-a2
  112.         moveq    #0,d0
  113.  
  114.         bsr    _kinit
  115.  
  116.         rts
  117.  
  118. .dchk        dc.w    0
  119. .disk        dc.w    1
  120.  
  121. ;--------------------------------
  122.  
  123. _kinit        movem.l    a0-a1,-(a7)
  124.         lea    (_keyboard,pc),a1
  125.         cmp.l    $68,a1
  126.         beq    .q
  127.         lea    (_realint68,pc),a0
  128.         move.l    $68,(a0)
  129.         move.l    a1,$68
  130. .q        movem.l    (a7)+,a0-a1
  131.         rts
  132.  
  133. _realint68    dc.l    0
  134.  
  135. _keyboard    move.l    d0,-(a7)
  136.         move.b    $bfec01,d0
  137.         ror.b    #1,d0
  138.         not.b    d0
  139.  
  140. ; RAW-Key-Codes:
  141. ;    ESC    $45
  142. ;    DEL    $46
  143. ;    F1..F10    $50..$59
  144. ;    HELP    $5f
  145.  
  146.         cmp.b    (_keydebug),d0
  147.         bne    .1
  148.         move.l    (a7)+,d0
  149.         move.w    (a7),(6,a7)        ;sr
  150.         move.l    (2,a7),(a7)        ;pc
  151.         clr.w    (4,a7)            ;ext.l sr
  152.         bra    _debug            ;coredump & quit
  153. .1
  154.         cmp.b    (_keyexit),d0
  155.         beq    _exit            ;exit
  156.  
  157.         move.l    (a7)+,d0
  158.         move.l    (_realint68),-(a7)    ;enter orginal rou.
  159.         rts
  160.  
  161. ;--------------------------------
  162.  
  163. _resload    dc.l    0            ;address of resident loader
  164.  
  165. ;--------------------------------
  166.  
  167. _exit        pea    TDREASON_OK.w
  168.         bra    _end
  169. _debug        pea    TDREASON_DEBUG.w
  170. _end        move.l    (_resload),-(a7)
  171.         add.l    #resload_Abort,(a7)
  172.         rts
  173.  
  174. ;======================================================================
  175.  
  176.     END
  177.